$(function(){
	$('#menu-table').bootstrapTable({
		method : 'post',
		url : 'system/menu/getList',
		cache : false,
		contentType: "application/json",//远程数据请求的“contentType”类型（如：application/json，application/x-www-form-urlencoded）。默认值application/json。
		height : $(window).height()-180,
		undefinedText : "--",//定义默认的undefined显示文字。
		striped : true,//使表格带有条纹。
		sortName : "menuOrder",
		sortOrder : "asc",
		dataType : "json",
		pagination : true,//设置True在表格底部显示分页工具栏。
		sidePagination : "server", //定义表格分页的位置，只能是“client”（客户端）和“server”（服务器端）。
		pageSize : 25,
		pageList : [ 10, 25, 50, 100, 200 ],
		search : true,//启用搜索输入框。
		showColumns : true,//设置为True可显示表格显示/隐藏列表。
		showToggle:true,//设置为True可显示切换普通表格和名片（card）布局。
		showRefresh : true,//设置为True可显示刷新按钮。
		minimumCountColumns : 2,//表格显示/隐藏列表时可设置最小隐藏的列数。
		clickToSelect : true,//设置为True时点击行即可选中单选/复选框。
		toolbar : "#toolbar",//自定义工具栏
		queryParamsType : "limit",//设置为“limit”可以发送标准的RESTFul类型的参数请求。
		queryParams : function(params) {
			var isDesc = false;
			if("desc"==params.order){
				isDesc = true;
			}
			return {
				pageSize : params.limit,
				pageNum : (params.offset / params.limit) + 1,
				sort : params.sort,
				desc : isDesc,
				or : true,
				menuName : params.search,
				url : params.search,
				icon : params.search
			};
		},
		responseHandler : function(response){
			if(response.result && response.itemCount){
				return {
					"rows": response.result,
					"total": response.itemCount
				};
			}else{
				return {
					"rows": [],
					"total": 0
				};
			}
		},
		columns : [ {
			field : 'state',
			checkbox : true
		}, {
			field : 'menuOrder',
			title : '序号',
			align : 'center',
			valign : 'middle',
			sortable : true
		}, {
			field : 'menuName',
			title : '菜单',
			align : 'center',
			valign : 'middle',
			sortable : true,
			formatter: nameFormatter
		}, {
			field : 'url',
			title : '地址',
			align : 'center',
			valign : 'middle',
			sortable : true
		}, {
			field : 'asParent',
			title : '点击效果',
			align : 'center',
			valign : 'middle',
			sortable : true,
			formatter: asParentFormatter
		}, {
			field : 'icon',
			title : '图标',
			align : 'center',
			valign : 'middle',
            sortable : true,
            formatter: iconFormatter
		}, {
			field : 'operate',
			title : '操作',
			align : 'center',
			valign : 'middle',
			clickToSelect : false,
			formatter : operateFormatter,
			events : operateEvents
		} ]
	});
	
	$('#asParent').multiselect({
		buttonClass:"form-control info-input",
		buttonWidth:"100%",
		maxHeight: 200,
		buttonText: function(options, select) {
			if (options.length === 0) {
                return '请选择 ...';
            }else {
                 var labels = [];
                 options.each(function() {
                     if ($(this).attr('label') !== undefined) {
                         labels.push($(this).attr('label'));
                     }else {
                         labels.push($(this).html());
                     }
                 });
                 return labels.join(', ') + '';
             }
		},buttonTitle: function(options, select) {
            var labels = [];
            options.each(function () {
                labels.push($(this).attr('title'));
            });
            return labels.join(',');
        },onChange: function(option, checked, select) {
            if($(option).val()=="true"){
    			$("#url").val("");
    			$('#parentId').multiselect("select","-1",true);
				var parentIds = [];
				$('#parentId option[value!=-1]').each(function(i,v){
					parentIds.push(v.value);
				});
				$('#parentId').multiselect('deselect', parentIds);
				$('#roleIds').multiselect('deselectAll',false);
				$('#roleIds').multiselect('updateButtonText');
				
    			$("#url").attr("disabled","disabled");
    			$("#parentId").multiselect("disable");
				$('#roleIds').multiselect("disable");
    			$("#icon").removeAttr("disabled");
    			$("#chooseIcon").removeAttr("disabled");
    		}else if($(option).val()=="false"){
    			$("#url").removeAttr("disabled");
    			$("#parentId").multiselect('enable');
    			if(isAddParentMenu){
    				$('#parentId').multiselect('dataprovider', parentMenuOptions);
    				isAddParentMenu = false;
				}
				$('#roleIds').multiselect('enable');
    			if($("#parentId").val()==null || $("#parentId").val()=="" || $("#parentId").val()=="-1"){
        			$("#icon").removeAttr("disabled");
        			$("#chooseIcon").removeAttr("disabled");
        		}else{
        			$("#icon").val("");
        			$("#icon").attr("disabled","disabled");
        			$("#chooseIcon").attr("disabled","disabled");
        		}
    		}
        }
	});
	
	var options = [{label: "跳转链接地址", title: "跳转链接地址", value: false, selected: true},
	               {label: "弹出下级菜单", title: "弹出下级菜单", value: true}
	               ];
	$('#asParent').multiselect('dataprovider', options);
	
	$('#parentId').multiselect({
		enableCaseInsensitiveFiltering: true,
		filterPlaceholder:"搜索",
		buttonClass:"form-control info-input",
		buttonWidth:"100%",
		maxHeight: 200,
		buttonText: function(options, select) {
			if (options.length === 0) {
                return '请选择 ...';
            }else {
                 var labels = [];
                 options.each(function() {
                     if ($(this).attr('label') !== undefined) {
                         labels.push($(this).attr('label'));
                     }else {
                         labels.push($(this).html());
                     }
                 });
                 return labels.join(', ') + '';
             }
		},buttonTitle: function(options, select) {
            var labels = [];
            options.each(function () {
                labels.push($(this).attr('title'));
            });
            return labels.join(',');
        },onChange: function(option, checked, select) {
        	if($(option).val()==null || $(option).val()=="" || $(option).val()=="-1"){
    			$("#icon").removeAttr("disabled");
    			$("#chooseIcon").removeAttr("disabled");
    		}else{
    			$("#icon").val("");
    			$("#icon").attr("disabled","disabled");
    			$("#chooseIcon").attr("disabled","disabled");
    		}
        }
	});
	
	var parentMenuOptions = [];
	var isAddParentMenu = false;
	get("system/menu/findMenuAsParent",function (array, textStatus) {
		parentMenuOptions = [{label: "请选择...", title: "请选择...", value: "-1", selected: true}];
		$.each(array,function(i,v){
			parentMenuOptions.push({label: v.menuName, title: v.menuName, value: v.menuId});
		});
		$('#parentId').multiselect('dataprovider', parentMenuOptions);
	});
	
	$('#roleIds').multiselect({
		includeSelectAllOption: true,
		selectAllText:"全选",
		enableCaseInsensitiveFiltering: true,
		filterPlaceholder:"搜索",
		buttonClass:"form-control info-input",
		buttonWidth:"100%",
		maxHeight: 200,
		buttonText: function(options, select) {
			if (options.length === 0) {
                return '请选择 ...';
            }else if (options.length > 5) {
                return '选择了('+options.length+')个角色';
            }else {
                 var labels = [];
                 options.each(function() {
                     if ($(this).attr('label') !== undefined) {
                         labels.push($(this).attr('label'));
                     }else {
                         labels.push($(this).html());
                     }
                 });
                 return labels.join(', ') + '';
             }
		},buttonTitle: function(options, select) {
            var labels = [];
            options.each(function () {
                labels.push($(this).attr('title'));
            });
            return labels.join(',');
        }
	});
	
	get("system/role/findRoles",function (array, textStatus) {
		var options = [];
		$.each(array,function(i,v){
			options.push({label: v.roleName, title: v.roleName, value: v.roleId});
		});
		$('#roleIds').multiselect('dataprovider', options);
	});
	
	$("#addMenu-btn").click(function(){
		$("#menuId").val("");
		$("#menuName").val("");
		$("#url").val("");
		$("#menuOrder").val("");
		$("#icon").val("");
		$('#parentId').multiselect("select",'-1',true);
		var parentIds = [];
		$('#parentId option[value!=-1]').each(function(i,v){
			parentIds.push(v.value);
		});
		$('#parentId').multiselect('deselect', parentIds);
		
		$('#asParent').multiselect("select",'false',true);
		$('#asParent').multiselect('deselect','true');
		$('#roleIds').multiselect('deselectAll',false);
		$('#roleIds').multiselect('updateButtonText');
		$(".info-label").html("");
		$("#menuinfo-modal").modal("show");
	});
	$("#delMenu-btn").click(function(){
		var array = $('#menu-table').bootstrapTable("getSelections");
		if(array!=null && array.length>0){
			var ids = "";
			$.each(array,function(i,v){
				ids+=v.menuId+",";
			});
			bootbox.confirm("您确定要将菜单删除吗？", function(result){
				if(result){
					del("system/menu/delMenus/"+ids,function (json, textStatus) {
						if(json.success){
							bootbox.alert("菜单删除成功");
							$('#menu-table').bootstrapTable("refresh",{silent: true});
						}else{
							bootbox.alert("菜单删除失败");
						}
					});
				}
			});
		}else{
			bootbox.alert("请选择要删除的菜单");
		}
	});
	
	$("#menuinfo-save-btn").click(function(){
		var menuId = $("#menuId").val();
		var menuName = $("#menuName").val();
		if(menuName==null || typeof(menuName) == "undefined"){
			$("#menuName-label").html("<code>*请输入菜单名称*</code>");
			return false;
		}
		menuName = menuName.replace(/(^\s*)|(\s*$)/g, "");
		if(menuName==""){
			$("#menuName-label").html("<code>*请输入菜单名称*</code>");
			return false;
		}
		
		var asParent = $("#asParent").val();
		if(asParent=="false"){
			var url = $("#url").val();
			if(url==null || typeof(url) == "undefined"){
				$("#url-label").html("<code>*请输入菜单地址*</code>");
				return false;
			}
			url = url.replace(/(^\s*)|(\s*$)/g, "");
			if(url==""){
				$("#url-label").html("<code>*请输入菜单地址*</code>");
				return false;
			}
		}
		
		var parentId = $("#parentId").val();
		if(asParent=="false" && parentId=="-1"){
			var icon = $("#icon").val();
			if(icon==null || typeof(icon) == "undefined"){
				$("#icon-label").html("<code>*请输入菜单图标*</code>");
				return false;
			}
			icon = icon.replace(/(^\s*)|(\s*$)/g, "");
			if(icon==""){
				$("#icon-label").html("<code>*请输入菜单图标*</code>");
				return false;
			}
		}
		
		var menuOrder = $("#menuOrder").val();
		if(menuOrder==null || typeof(menuOrder) == "undefined"){
			$("#menuOrder-label").html("<code>*请输入菜单序号*</code>");
			return false;
		}
		menuOrder = menuOrder.replace(/(^\s*)|(\s*$)/g, "");
		if(menuOrder==""){
			$("#menuOrder-label").html("<code>*请输入菜单序号*</code>");
			return false;
		}
		var pattern = /^[0-9]*$/;
		if(!pattern.test(menuOrder)){
			$("#menuOrder-label").html("<code>*序号格式不正确,请输入数字*</code>");
			return false;
		}
		
		var roleIdArray = $("#roleIds").val();
		var roleIds="";
		if(roleIdArray!=null && roleIdArray.length>0){
			$.each(roleIdArray,function(i,v){
				roleIds+=v+",";
			});
		}else{
			roleIds="-1";
		}
		
		var data = $("#menuinfo-form").serializeJSON();//将表单序列化成json，再将json转成字符串
		postJson("system/menu/editMenu/"+roleIds,function (json, textStatus){
			console.log(json);
			if(json.success){
				if(asParent=="true"){
					get("system/menu/findMenuAsParent",function (array, textStatus) {
						parentMenuOptions = [{label: "请选择...", title: "请选择...", value: "-1", selected: true}];
						$.each(array,function(i,v){
							parentMenuOptions.push({label: v.menuName, title: v.menuName, value: v.menuId});
						});
						isAddParentMenu = true;
					});
				}
				if(menuId==null || typeof(menuId)=="undefined" || menuId.replace(/(^\s*)|(\s*$)/g, "")==""){
					bootbox.alert("菜单添加成功");
				}else{
					bootbox.alert("菜单信息修改成功");
				}
				$('#menu-table').bootstrapTable("refresh",{silent: true});
			}else{
				if(menuId==null || typeof(menuId)=="undefined" || menuId.replace(/(^\s*)|(\s*$)/g, "")==""){
					bootbox.alert("菜单添加失败:"+json.result);
				}else{
					bootbox.alert("菜单修改失败:"+json.result);
				}
			}
	    },data);
	});
	
	$("#chooseIcon").click(function(){
		$("#menuicons-modal").modal("show");
	});
	
	$(".the-icons li").click(function(){
		$("#icon").val($(this).find("i").attr("class"));
		$("#menuicons-modal").modal("hide");
	});
});

function nameFormatter(value, row, index){
	var icon = index % 2 === 0 ? 'glyphicon-star' : 'glyphicon-star-empty';
	return '<i class="glyphicon ' + icon + '"></i> ' + value;
}

function asParentFormatter(value, row, index){
	if(value){
		return "弹出下级菜单";
	}else{
		return "跳转链接地址";
	}
}

function iconFormatter(value, row, index){
	if(value!=null && value!=""){
		return "<i class='"+value+"'></i>";
	}else{
		return value;
	}
}

function operateFormatter(value, row, index) { 
    return [
        '<a class="edit" href="javascript:void(0);" title="编辑">',
            '<i class="glyphicon glyphicon-edit"></i>编辑',
        '</a>&nbsp;&nbsp;',
        '<a class="remove" href="javascript:void(0);" title="删除">',
            '<i class="glyphicon glyphicon-remove"></i>删除',
        '</a>'
    ].join('');
}

window.operateEvents = {
	'click .edit': function (e, value, row, index) {
		post("system/menu/findMenuById",function (json, textStatus) {
			if(json!=null){
				$("#menuId").val(json.menuId);
				$("#menuName").val(json.menuName);
				$("#url").val(json.url);
				$("#menuOrder").val(json.menuOrder);
				$("#icon").val(json.icon);
				
				$('#parentId').multiselect("select",json.parentId,true);
				var parentIds = [];
				$('#parentId option[value!='+json.parentId+']').each(function(i,v){
					parentIds.push(v.value);
				});
				$('#parentId').multiselect('deselect', parentIds);
				
				$('#asParent').multiselect("select",json.asParent,true);
				$('#asParent').multiselect('deselect',!json.asParent);
				
				$('#roleIds').multiselect('deselectAll',false);
				$('#roleIds').multiselect('updateButtonText');
				$(".info-label").html("");
				post("system/roleMenuMap/getRolesByMenuId",function (array, textStatus) {
					if(array!=null){
						var roleIdArray = [];
						$.each(array,function(i,v){
							roleIdArray.push(v.roleId);
						});
						$('#roleIds').multiselect('select', roleIdArray);
					}
				},{menuId:row.menuId});
				$("#menuinfo-modal").modal("show");
			}
		},{menuId:row.menuId})
	},
	'click .remove': function (e, value, row, index) {
		bootbox.confirm("您确定要将菜单删除吗？", function(result){
			if(result){
				del("system/menu/delMenus/"+row.menuId,function (json, textStatus) {
					if(json.success){
						bootbox.alert("菜单删除成功");
						$('#menu-table').bootstrapTable("refresh",{silent: true});
					}else{
						bootbox.alert("菜单删除失败");
					}
				});
			}
		});
	}
};